﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using kk.components.contracts;
using kk.messages.contracts.DataModel;
using kk.preiskategorieadapter;
using NUnit.Framework;

namespace kk.preiskategorienadapter.tests
{
    [TestFixture]
    public class testPreiskategorienAdapter
    {
        [Test]
        public void Parsen_einer_Preiskategorie_inkl_Whitespace()
        {
            var pk = PreiskategorieAdapter.ParseSingle(" B =  9,5 ");
            Assert.AreEqual('B', pk.KategorieSchlüssel);
            Assert.AreEqual(9.5, pk.Preis);
        }

        [Test]
        public void Laden_der_Preiskategoriendatei()
        {
            var pkList = PreiskategorieAdapter.ParseFile("testpreiskategorien.txt").ToArray();

            Assert.AreEqual('A', pkList.ElementAt(0).KategorieSchlüssel);
            Assert.AreEqual(10.0, pkList.ElementAt(0).Preis);
            Assert.AreEqual('B', pkList.ElementAt(1).KategorieSchlüssel);
            Assert.AreEqual(9.5, pkList.ElementAt(1).Preis);
            Assert.AreEqual('C', pkList.ElementAt(2).KategorieSchlüssel);
            Assert.AreEqual(8.0, pkList.ElementAt(2).Preis);
        }


        [Test]
        public void Nachricht_verarbeiten()
        {
            var sut = new PreiskategorieAdapter("testpreiskategorien.txt");

            IEnumerable<Preiskategorie> preiskategorien = new Preiskategorie[0];
            sut.ProcessPreiskategorien(new Request<IEnumerable<Preiskategorie>>(r => preiskategorien = r));

            Assert.AreEqual(3, preiskategorien.Count());
        }
    }
}
